package personal.leil.learning.bubble;

import personal.leil.learning.utils.ArrayUtils;

/**
 * 冒泡排序
 * <p>
 * 冒泡排序代码实现
 * </p>
 *
 * @author Leil
 * @version 1.0
 * @since 2023-12-29
 */
public class BubbleSort {

    /**
     * 冒泡排序
     *
     * @param arr 源数组
     */
    public static void bubbleSort(int[] arr) {
        for (int i = arr.length - 1; i > 0; i--) {
            bubble(arr, i);
        }
    }

    /**
     * 将数组在0~r的范围内冒泡
     *
     * @param arr 源数组
     * @param r   冒泡右边界
     */
    public static void bubble(int[] arr, int r) {
        for (int i = 0; i < r; i++) {
            if (arr[i] > arr[i + 1]) {
                ArrayUtils.swapByXOR(arr, i, i + 1);
            }
        }
    }


    /********************* For Test *************************/

    public static void main(String[] args) {
        int[] arr = ArrayUtils.generateRandomArr(20);
        System.out.println("before sort:");
        ArrayUtils.printArr(arr);
        bubbleSort(arr);
        System.out.println("after sort:");
        ArrayUtils.printArr(arr);
    }
}
